Android — Fastjson

前言

最近看好多优秀项目中都集成了Fastjson,最开始并没在意。因为感觉Android系统自带的JSONObject解析还蛮简单呀,而且性能还可以。感觉唯一一点不好的就是数组嵌套数组的时候JSONObject和JSONArray相互转化会搞得我好乱。但是,那么多人用,那肯定有它的优点所在,又是BAT出品,绝对一试。看文档已经惊了,号称:

目前 Java 语言中最快的 JSON 库

就冲这句话,就一定要学了,就喜欢这种自信!官方文档介绍如下:

Fastjson提供Android版本,和标准版本相比,Android版本去掉一些Android虚拟机dalvik不支持的功能,使得jar更小,同时针对dalvik做了很多性能优化,包括减少方法调用等。parse为JSONObject/JSONArray时比原生org.json速度快,序列化反序列化JavaBean性能比jackson/gson性能更好。

但是很可惜,文档写的很一般。

第一步

添加依赖:

1
compile 'com.alibaba:fastjson:1.1.65.android'

官方文档 ,里面给的例子是 JSON String 和 JavaBean 的相互转化。

实践出真知,假如解析以下 JSON (来自有道翻译 API):

解析翻译和释义:

1
2
3
4
5
6
String jsonString = response.body().string();
JSONObject object = JSON.parseObject(jsonString);
JSONObject objectBasic = (JSONObject) object.get("basic");
JSONArray jsonArray = objectBasic.getJSONArray("explains");
JSONArray array = object.getJSONArray("translation");
String result = array.toJSONString() + jsonArray.toJSONString();

实际上和使用原生的 JSONObject / JSONArray 好像并没有什么区别,其实并不然。看官方文档,我们可得知,Fastjson 可以将 Json 数据转换为一个 JavaBean 对象。下面我们就用一个小例子来演示一下:

首先创建 JavaBean:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class FastJsonGroup {
private String query;
private long errorCodeQuery;
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public long getErrorCodeQuery() {
return errorCodeQuery;
}
public void setErrorCodeQuery(long errorCodeQuery) {
this.errorCodeQuery = errorCodeQuery;
}
}

Json 数据:

1
{"query":"ill","errorCode":0}

转换就很简单了:

1
2
3
String test = "{\"query\":\"ill\",\"errorCode\":0}";
FastJsonGroup group = JSON.parseObject(test, FastJsonGroup.class);
System.out.println("ErrorCode: "+group.getErrorCodeQuery() +" Query: "+ group.getQuery());

最后,关于将 JavaBean 转换为 Json 可以查看官方文档,还是很好理解的,下面会给出链接。

参考:

https://github.com/alibaba/fastjson/wiki/Samples-DataBind

http://www.jianshu.com/p/013e89d8cf17

http://www.jianshu.com/p/faadf4f1392e

http://www.cnblogs.com/hsqdboke/p/5545183.html

我们一直都向往,面朝大海,春暖花开。 但是几人能做到,心中有爱,四季不败?